home *** CD-ROM | disk | FTP | other *** search
/ The Atari Compendium / The Atari Compendium (Toad Computers) (1994).iso / files / umich / diskutil / gemar220.lzh / GEMAR220 / UFSL / UFSL.TXT < prev   
Encoding:
Text File  |  1993-12-12  |  6.6 KB  |  156 lines

  1. UFSL Universal Fontselector (c) 1991-1993 by Michael Thänitz
  2.  
  3. UFSL ist Freeware.
  4.  
  5. Wo liegt eigentlich das Problem? Nun ganz einfach, die Einstellung eines
  6. anderen als des Systemfonts ist eigentlich recht trivial. vst_font()
  7. stellt den Font ein, vst_point() stellt die Gröβe ein. Woher weiβ man
  8. aber nun welche Fonts es gibt und in welchen Gröβen sie vorliegen?
  9. Auch das ist recht einfach. Man lädt die Fonts, klappert alle Fonts nach
  10. Ihren "echten" Gröβen ab und stellt alles in einer Listbox dar.
  11. Tja, und da liegt das Problem. Ist die Abfage der Gröβen schon ein klein
  12. wenig kompliziert, schmeiβen bei Listbox die meisten Gelegenheits-
  13. programmierer das Handtuch. Entsprechend bescheiden sind dann auch die
  14. Ergebnisse. Hier springt UFSL nun ein und bietet den gleichen einfach
  15. zu programmierenden Komfort wie bei der Fileselectbox. Einfach die
  16. Fontauswahlbox mit einigen einfach zu erfahrenen Parametern versorgen,
  17. über den Cookie aufrufen und man erhält FontId und die Punktgröβe zurück.
  18. Ein entsprechendes Beispiel liegt mit FONTTEST.C vor. Der Programmierer
  19. entscheidet, ob es sich um einen konventionellen Dialog mit Let 'em Fly
  20. Unterstützung oder um einen Fensterdialog handelt.
  21.  
  22. UFSL darf jedem Programm ohne Rücksprache kostenlos beigelegt werden.
  23. Trotzdem interessiert es mich natürlich, wo UFSL überall beiliegt.
  24.  
  25. UFSL nutzt die Möglichkeiten von "Let 'em Fly" laut Doku Version 1.17.
  26. UFSL stellt beliebig viele Fonts mit je max. 16 Größen dar.
  27.  
  28. ***************************************************************************
  29.  
  30. Programmierschnittstelle:
  31. -------------------------
  32. UFSL ist eine Fontauswahlbox für den Autoordner. Sie bietet dem
  33. Programmierer eine einfache Programmierschnittstelle über einen Cookie.
  34.  
  35. Der Cookie lautet: 'UFSL'.
  36. Der Cookie liefert einen Zeiger auf folgende Struktur:
  37.  
  38. typedef struct
  39. {
  40.    unsigned long  id;      /* UFSL ID (UFSL)       */
  41.    unsigned int   version; /* Version (BCD-Format) */
  42.    int dialtyp;            /* 0=Dialog, 1=Fenster  */
  43.    int cdecl (*font_selinit)(void);
  44.    int cdecl (*font_selinput)(
  45.                int vdihandle,
  46.                char *text,    /* eigener Text, max. 34 Zeichen      */
  47.                int ftype,     /* 1=nur monospaced Fonts, 0=alles    */
  48.                int *fretid,   /* eingestellte FontId                */
  49.                int *fretsize  /* eingestellte Fontgröße             */
  50.                );
  51.    OBJECT *helpbutton;           /* Typ: BOXTEXT                    */
  52.    void cdecl (*helpfunc)(void); /* Benutzerdefinierte Helpfkt.     */
  53.  
  54.    /**** ab Version 0.91 ********************************************/
  55.    char *examplestr;            /* Beispieltext für Fontdarstellung */
  56.  
  57.    /**** ab Version 0.96 ********************************************/
  58.    void cdecl (*msgfunc)(int event, int msgbuf[]);/* Redrawfunktion */
  59. } UFSL;
  60.  
  61. Aufruf:
  62. -------
  63. UFSL *ufsl;
  64. ufsl=(UFSL *)get_cookie('UFSL');
  65. ufsl->helpfunc= my_helpfunc;   /* Hilfefunktion oder NULL */
  66. ufsl->msgfunc = my_msghandler; /* Redrawfunktion oder NULL, Dialtyp beachten */
  67. ufsl->fontsel_input(vdihandle,"Bitte Font auswählen",0,&id,&size);
  68. oder
  69. ufsl->fontsel_input(vdihandle,NULL,0,&id,&size);
  70.  
  71. Returncodes:
  72. ------------
  73.  1 : Alles OK, Werte gültig.
  74.  0 : Abbruch gewählt.
  75. -1 : Out of memory.
  76. -2 : Unzulässiger Mehrfachaufruf.
  77. -3 : Fontgröße konnte nicht identifiziert werden.
  78. -4 : Anzahl Fonts muß größer null sein.
  79.  
  80. Sonderfunktionen:
  81. -----------------
  82. void cdecl (*helpfunc)(void); /* Benutzerdefinierte Helpfkt.     */
  83.  
  84. UFSL kann eine benutzerdefinierbare Hilfefunktion über den ebenfalls
  85. optionalen Hilfebutton aufrufen. helpfunc() benötigt keine Parameter
  86. und liefert auch keinen Wert zurück.
  87.  
  88.  
  89.  
  90. void cdecl (*msgfunc)(int event, int msgbuf[]);/* Redrawfunktion */
  91.  
  92. Bei Verwendung von UFSL als Fensterdialog ist es notwendig eine
  93. Redrawfunktion zur Verfügung zu stellen. Sie schickt die anfallenden
  94. Events an das aufrufende Programm zurück, damit nach Verschieben
  95. des Dialogs die Hintergrundfenster restauriert werden können.
  96. msgfunc() liefert als ersten Parameter das Ergebnis von evnt_multi()
  97. und als zweiten Parameter die MsgPipe. Ein Returncode wird nicht
  98. benötigt. Das Anwenderprogramm muβ die nötigen Routinen zur Fenster-
  99. behandlung zur Verfügung stellen. wind_update(..._UPDATE) wird von
  100. UFSL nicht gesetzt, obliegt also dem rufenden Anwenderprogramm.
  101. Prinzipbedingt(?) ist die Memoryprotection von MTOS auszuschalten.
  102.  
  103. Grundsätzlich gilt es zu überlegen, ob tatsächlich alle Events
  104. entsprechend beantwortet werden sollen. Ein WM_TOPPED, das andere
  105. eigene Fenster nach vorn bringt, sollte wohl nicht beantwortet werden,
  106. da UFSL naturgemäβ nur applikationsmodal sein kann, da UFSL ja in 
  107. einem eigenen form_do() sprich evnt_multi() kreist.
  108.  
  109. ***************************************************************************
  110.  
  111. Versionsübersicht:
  112. ------------------
  113.  
  114. Version 0.90 vom Mai 1993 (Dezember 1991)
  115. -----------------------------------------
  116. Ich möchte noch anmerken, das die Cookieinstallation noch recht dürftig
  117. ist. Es wird einfach installiert, ohne zu fragen ob Platz ist. Das Profibuch
  118. bietet hierzu eine m.E. fehlerhafte Beschreibung. Es wird von einen Nullcookie
  119. und seines Wertes gesprochen. Das ist m.E. ein Syntaxerror. Wer also
  120. vernünftige Cookieroutinen in 'C' hat, möchte mir doch bitte weiterhelfen.
  121.  
  122. Dem Fensterdialog muβ noch seine Unmodalität abgewöhnt werden.
  123.  
  124. Version 0.91 vom Mai 1993
  125. -------------------------
  126. Die Cookiefrage ist geklärt durch Assemblerroutinen von Arnd Beissner.
  127. Alle benutzerdefinierten Variablen werden beim Verlassen zurückgesetzt.
  128. Fonteinstellung über Editfeld mit Mausdoppelklick auf Beispieltext.(Nur
  129. Speedo).
  130.  
  131. Version 0.92 vom Juni 1993
  132. --------------------------
  133. UFSL erkennt Auflösungswechsel und initialisiert sein Resourcefile neu.
  134.  
  135. Version 0.93 vom Juli 1993
  136. --------------------------
  137. Bugfix. appl_init() entfernt. Unter MTOS gabs dabei einen Absturz.
  138.  
  139. Version 0.94 - 0.95 vom August/September 1993
  140. ---------------------------------------------
  141. Erweiterte Returncodes für detailiertere Fehlermeldungen.
  142.  
  143. Version 0.96 vom November/Dezember 1993
  144. ---------------------------------------
  145. Returnwerte für FontId und FontSize bleiben bei ABBRUCH unangetastet.
  146. Das gilt auch für die Attribute des übergebenen VdiHandles, weil ein
  147. internes VdiHandle genutzt wird. ufsl->msgfunc(event, msgbuf) ruft
  148. für die programmeigenen Fenster deren Redrawfunktion auf, damit beim
  149. Verschieben von UFSL der Hintergrund restauriert wird. "dummy font"
  150. wird ausgewertet.
  151.  
  152. ***************************************************************************
  153.  
  154. MfG Michael Thänitz
  155.  
  156. Email: MICHAEL THAENITZ @BI im Mausnetz